package cc.rengu.igas.share.facade.bean.cups;

import cc.rengu.oltp.service.common.enums.OltpRpcdEnum;
import cc.rengu.oltp.service.model.BizException;

import java.util.Arrays;

/**
 * F60.3.5：交易发起方式（在交易类型关键信息域相同的情况下，该域可细分交易类型）
 *
 * @author fangminwei
 * @date 2021/4/17
 */
@SuppressWarnings("AlibabaEnumConstantsMustHaveComment")
public enum F60_3_5_TxnSendMethodEnum {
    _0("0", "未知。该方式用于表示未知支付方式或不关心此交易的具体发起方式下的缺省表示。"),
    _1("1", "现场。该方式用于表示确定的现场支付，持卡人商户收银员或银行柜面人员面对面、由受理方发起实时交易的方式，如现场消费、惠农代理点取现，现金充值等交易"),
    _2("2", "自助。包括有卡自助和无卡自助的各类支付，指金融受理终端无人值守，持卡人操作终端并确认发起实时交易，包括多媒体终端、电话支付终端等。例如ATM取现、自助存款，语音、手机支付，基于委托关系的自助汇款/存款等交易"),
    _3("3", "联机代理。各类代理支付，指持卡人不在商户现场，由商户收集交易信息，商户操作交易终端并发起的非面对面交易。例如订购、实时代收等交易"),
    _4("4", "批量代理。各类代理支付，指持卡人不在现场，商户代为通过批量方式发起。例如批量代收、批量贷记"),
    _5("5", "延迟联机自助。仅限有卡支付，指金融受理终端无人值守，由持卡人操作发起的延迟联机交易，包括地铁、停车场闸机等。交易类型包括自助消费和自助预授权。"),
    _6("6", "延迟联机现场。仅限有卡支付，指确定的现场支付，持卡人商户收银员或银行柜面人员面对面，由受理方发起的延迟联机交易。交易类型包括消费和预授权"),
    ;

    private String code;
    private String desc;

    F60_3_5_TxnSendMethodEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return code + "-" + desc;
    }

    public static F60_3_5_TxnSendMethodEnum find(String code) {
        F60_3_5_TxnSendMethodEnum result = Arrays.stream(F60_3_5_TxnSendMethodEnum.values())
                .filter(e -> e.getCode().equals(code)).findFirst().orElse(null);

        if (result == null) {
            throw new BizException(OltpRpcdEnum.PARAM_IS_EMPTY_OR_NULL.getRespCode(), "找不到对应的枚举信息" + code);
        }
        return result;
    }
}
